/* Copyright (c) 2011 Stephan Zehrer
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#import "NSXMLElement+XMLTools.h"


@implementation NSXMLElement (XMLTools)

-(NSXMLElement*) addChildElementWithName:(NSString *) name {
	
	NSXMLElement *element =  [NSXMLElement elementWithName:name];
	[self addChild:element];
	
	return element;
}

-(NSXMLElement*) addChildElementWithName:(NSString *) name id:(NSString *) id {
	
	NSXMLElement *element = [self addChildElementWithName:name];
	[element addAttributeWithName:@"id" stringValue:id];
	
	return element;
}

-(NSXMLElement*) addChildElementWithName:(NSString *) name stringValue:(NSString *) value {
	
	NSXMLElement *element = [self addChildElementWithName:name];
	[element setStringValue: value];
	
	return element;
}

-(NSXMLNode*) addAttributeWithName:(NSString *) name stringValue:(NSString *) value {
	
	NSXMLNode *node =  [NSXMLNode attributeWithName:name stringValue:value];
	[self addAttribute:node];
	
	return node;
}


- (NSXMLElement *) elementForName:(NSString *)name {
	
	NSArray *elements = [self elementsForName:name];
	
	if ((elements != nil) && ([elements count] == 1)) {
		return [elements objectAtIndex:0];
	} else {
		return nil;
	}
}

- (NSXMLElement *) findOrAddElementForName:(NSString *)name {
	
	NSArray *elements = [self elementsForName:name];
	
	if ((elements != nil) && ([elements count] == 1)) {
		return [elements objectAtIndex:0];
	} else {
        return [self addChildElementWithName:name];
	}
}

- (NSXMLNode *) findOrAddAttributeForName:(NSString *)name {
	
	NSXMLNode *node = [self attributeForName:name];
	
	if (node != nil) {
		return node;
	} else {
		return [self addAttributeWithName:name stringValue:nil];
	}
}

@end
